package com.xm.linxiaogang.base.fragment

import android.os.Bundle
import com.trello.rxlifecycle3.components.support.RxFragment

/**
 * 懒加载Fragment（仅针对使用FragmentPagerAdapter装载Fragment时有效）
 */
class LazyFragment : RxFragment() {
    //标记是否加载完成
    private var isViewCreated = false

    //标记是否可见
    var isUIVisible = false

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        isViewCreated = true
        onVisible()
    }

    /**
     * Fragment可见状态
     * （仅针对使用FragmentPagerAdapter装置Fragment时有效）
     *
     * @param isVisibleToUser
     */
    override fun setUserVisibleHint(isVisibleToUser: Boolean) {
        super.setUserVisibleHint(isVisibleToUser)
        isUIVisible = isVisibleToUser
        onVisible()
    }

    /**
     * 在Fragment可见并且view已经加装完成时执行懒加载方法
     */
    private fun onVisible() {
        //这里进行双重标记判断,是因为setUserVisibleHint会多次回调,并且会在onCreateView
        //执行前回调,必须确保onCreateView加载完毕且页面可见才去请求数据
        if (isViewCreated && isUIVisible) {
            //执行懒加载方法
            lazyLoad()
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false
            isUIVisible = false
        }
    }

    /**
     * 懒加载（如果需要懒加载功能，请重写lazyLoad方法去请求数据或初始化组件）
     */
    fun lazyLoad() {

    }
}